package com.zcsy.manage.persistence.system;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.zcsy.manage.model.system.Menu;

/**
 * @ClassName: MenuDao
 * @Description: 菜单持久层接口
 * @author tanghan barbadosliy@163.com
 * @date 2015年2月1日 下午3:04:48
 *
 */
public interface MenuDao {
	
	/**
	  * @Title: getMenuByState
	  * @Description: 根据菜单状态获取菜单列表
	  * 
	  *   if state =1 :获取所有启用的菜单 
	  *     else if sate = 0 :获取所有停用的菜单
	  *     else if state= -1:获取所有菜单
	  * @param state 菜单状态
	  * @return List<Menu> 菜单集合
	  * @throws none
	  */
	List<Menu> getMenuByState(Integer state);
	
	/**
	  * @Title: getMenuByPId
	  * @Description: 根据父Id查询改菜单下的子菜单
	  * @param pid  父菜单Id
	  * @return List<Menu>    菜单集合
	  * @throws  none
	  */
	List<Menu> getMenuByPId(String pid);
	 
	List<Menu> getMenuByPIdAndRole(Map<String , Object> map);
	
	/** 
	 * @Title: getSubMenuCount 
	 * @Description: 获取子菜单数量
	 * @param @param pid
	 * @param @return     
	 * @return int     
	 * @throws 
	 */
	int getSubMenuCount(String pid);
	
	/** 
	 * @Title: getSubMenuCountAndRole 
	 * @Description: 获取有权限的子菜单数量
	 * @param @param map
	 * @param @return     
	 * @return int     
	 * @throws 
	 */
	int getSubMenuCountAndRole(Map<String , Object> map);
	
	/**
     * @Title: getMenuById
     * @Description: 根据Id查询改菜单下的子菜单
     * @param id  菜单Id
     * @return List<Menu>    菜单集合
     * @throws  none
     */
     Menu getMenuById(String id);
	
	/**
	  * @Title: insert
	  * @Description: 新增菜单方法
	  * @param record  新增对象
	  * @return int  新增结果
	  * @throws  none
	  */
	int insert(Menu record);
	
	/**
	  * @Title: updateByPrimaryKey
	  * @Description: 根据Id，更新菜单
	  * @param record  待修改对象(id不为空)
	  * @return int  新增结果
	  * @throws  none
	  */
	int updateByPrimaryKey(Menu record);
	
	/**
	 * @Title: queryByLocationURL
	 * @Description: 根据远程地址查找菜单
	 * @param locationURL
	 * @return    设定文件
	 * @throws
	 */ 
	Menu queryByLocationURL(String locationURL);
	
	/**
	 * Description: <br>
	 * 根据菜单Id[] 查询菜单列表<br>
	 * 
	 * @param ids 菜单Id数组
	 * @return 
	 * @see 
	 */
	List<Menu> queryMenusByIds(List<String> ids);
	
	/**
	 * Description: <br>
	 * 根据角色Id查询有权限的菜单列表
	 * @param roleId
	 * @return 菜单列表
	 * @see 
	 */
	List<Menu> queryMenuByRoleId(String roleId);
	
	/** 
	 * @Title: queryFunctionsByRoleId 
	 * @Description: 根据角色Id查询有权限的菜单和按钮
	 * @param @param roleId
	 * @param @return     
	 * @return List<Menu>     
	 * @throws 
	 */
	List<Menu> queryFunctionsByRoleId(String roleId);
	
	
	/**
	 * Description: <br>
	 * 根据角色Id查询有权限的菜单列表
	 * @param roleId
	 * @return 菜单列表
	 * @see 
	 */
	List<Menu> queryMenuByRoleIds(HashMap<String , Object> map);
	
	/** 
	 * @Title: queryPerformMenuByRoleIds 
	 * @Description: 根据角色ID获取平台菜单
	 * @param @param map
	 * @param @return     
	 * @return List<Menu>     
	 * @throws 
	 */
	List<Menu> queryPerformMenuByRoleIds(HashMap<String , Object> map);
	
	/**
     * Description: <br>
     * 根据动态查询菜单列表
     * @param record 菜单对象
     * @return 菜单列表
     * @see 
     */
    List<Menu> queryMenu(Menu record);
    
    /**
     * 
     * @Description 获取全部菜单<br>
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年5月10日
     * @see
     */
    List<Menu> getAllBySystem(Integer system);
    
    /**
     * 
     * @Description 获取所有叶子菜单<br>
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年5月11日
     * @see
     */
    List<Menu> getAllLeaves(Integer system);
    
    int insertButton(Menu record);
    
}
